import mysql.connector
from qiniu import Auth, put_data

#上传文件类
class UploadQiNiu:
    #只支持单文件上传
    def __init__(self, config):
        self.access_key = config['access_key']
        self.secret_key = config['secret_key']
        self.bucket_name = config['bucket_name']
        self.domain = config['domain']
        #初始化对接
        self._q = Auth(self.access_key, self.secret_key)

    # 上传二进制文件流
    # file_data 文件流数据（二进制数据）
    # save_file_name 上传到七牛云上保存时的名字
    def uploadData(self, file_data, save_file_name):
        #生成上传token
        token = self._q.upload_token(self.bucket_name, save_file_name)
        #上传文件
        ret, info = put_data(token, save_file_name, file_data)
        if info.status_code == 200:
            # return '/' . join([self.domain, save_file_name])
            return ret
        return None


# 相关配置（配置不会变，所以放在这里全局引用）
config = {
    'access_key': 'wpQPiR4dXyP60wJty4_W6Q5ZPsmFIY_q_52WkhFF',  # 填你的access_key
    'secret_key': 'oOFQeCr32KdcWk57hW9H4Z82LwltjTltRGfq8lKg',  # 填你的secret_key
    'bucket_name': 'zrgj-p',  # 填你的存储空间名称
    'domain': 'rglp5by35.hn-bkt.clouddn.com'  # 填你的空间域名
}

# 上传二进制文件
def uploadData(data: str, save_file_name: str):
    try:
        uploadQiNiu = UploadQiNiu(config)
        img_key = uploadQiNiu.uploadData(data, save_file_name)
        return img_key
    except:
        return False


# 存入数据库
def pictureIn(file_data, sid):
    mydb = mysql.connector.connect(
        host="124.222.244.117",  # 数据库主机地址
        user="zrgj9",  # 用户名
        passwd="zrgj9",  # 密码
        database="zrgj9"
    )
    mycursor = mydb.cursor()
    img_key = uploadData(file_data, sid)
    sql = "INSERT INTO student(picture) value(%s) where stuid = " + sid
    try:
        mycursor.execute(sql, img_key)
        mydb.commit()    # 数据表内容有更新，必须使用到该语句
    except:
        mydb.rollback()  # 数据库回滚（rollback）
    mydb.close()
    return mycursor.rowcount


